{
  "name": "Case 75 - Insurance Agency Owner Multi-Location Quality Control",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "months"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -912,
        -176
      ],
      "id": "f8cf961b-7122-4a64-b81b-de135d0ecab4",
      "name": "Monthly Schedule - 1st of Month"
    },
    {
      "parameters": {
        "actorId": {
          "__rl": true,
          "value": "Xb8osYTtOjlsgI6k9",
          "mode": "id",
          "cachedResultName": "Google Maps Scraper"
        },
        "customBody": "{\n  \"language\": \"en\",\n  \"maxReviews\": 100,\n  \"personalData\": true,\n  \"startUrls\": [\n    {\n      \"url\": \"https://www.google.com/maps/place/John+Gewartowski+-+State+Farm+Insurance+Agent/@40.2087901,-75.2998149,17z/data=!4m16!1m9!3m8!1s0x89c6a3ecf2f0c249:0xc5ec45c1ba49c2f0!2sJohn+Gewartowski+-+State+Farm+Insurance+Agent!8m2!3d40.208786!4d-75.29724!9m1!1b1!16s%2Fg%2F11q4c67kbx!3m5!1s0x89c6a3ecf2f0c249:0xc5ec45c1ba49c2f0!8m2!3d40.208786!4d-75.29724!16s%2Fg%2F11q4c67kbx?entry=ttu&g_ep=EgoyMDI1MTIwOS4wIKXMDSoASAFQAw%3D%3D\"\n    }\n  ],\n  \"reviewsSort\": \"newest\",\n  \"reviewsOrigin\": \"all\"\n}"
      },
      "type": "@apify/n8n-nodes-apify.apify",
      "typeVersion": 1,
      "position": [
        -720,
        -176
      ],
      "id": "32b7b02f-6dda-4c6b-ba2a-774bd0bb96e4",
      "name": "Scrape Agency Reviews",
      "credentials": {
        "apifyApi": {
          "id": "w5S6YBbbyUddEfQA",
          "name": "Apify account"
        }
      }
    },
    {
      "parameters": {
        "resource": "Datasets",
        "datasetId": "={{ $json.defaultDatasetId }}",
        "limit": 100
      },
      "type": "@apify/n8n-nodes-apify.apify",
      "typeVersion": 1,
      "position": [
        -528,
        -176
      ],
      "id": "3bce8054-779a-4d43-8f6b-d2336f8ad2b7",
      "name": "Get Dataset Items",
      "credentials": {
        "apifyApi": {
          "id": "w5S6YBbbyUddEfQA",
          "name": "Apify account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Filter out reviews without meaningful text\nconst items = $input.all();\nconst validItems = [];\n\nitems.forEach((item, index) => {\n  const text = item.json.text || item.json.textTranslated || '';\n  \n  // Skip if text is empty or too short\n  if (text.trim().length < 10) {\n    console.log(`Skipping item ${index}: Empty or too short review text`);\n    return;\n  }\n  \n  validItems.push(item);\n});\n\nconsole.log(`Filtered: ${items.length} total → ${validItems.length} valid reviews with text`);\n\nreturn validItems;"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -336,
        -176
      ],
      "id": "fb95dc98-755b-4e59-a535-8bb96306a23b",
      "name": "Validate Review Text"
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4o",
          "mode": "list",
          "cachedResultName": "GPT-4o"
        },
        "responses": {
          "values": [
            {
              "role": "system",
              "content": "You are an Insurance Operations Analyst. Analyze customer reviews about insurance agency experience. Identify both positive aspects and areas for improvement.\n\nReturn ONLY this exact JSON format with NO other text:\n\n{\n  \"feedback_category\": \"Claim Handling Speed|Agent Knowledge|Policy Explanation Clarity|Premium Competitiveness|Responsiveness|Renewal Process|Other\",\n  \"sentiment\": \"positive|negative|neutral|mixed\",\n  \"actionability\": \"Agent Recognition|Training Need|Claims Process Review|Pricing Review|Communication Improvement|Retention Risk|Competitive Intelligence|No Action Needed\",\n  \"agent_mention\": \"agent name if mentioned, or empty string\",\n  \"key_feedback\": \"specific observation from review\",\n  \"key_quote\": \"most important sentence from review\"\n}\n\nCATEGORIES:\n\nClaim Handling Speed = Claims processing time, adjuster responsiveness, settlement speed\nKeywords: claim, filed claim, adjuster, settlement, payout, claim denied, claim approved quickly\nExample: \"Claim was processed in 3 days, incredibly fast\" → Claim Handling Speed\n\nAgent Knowledge = Agent expertise on coverage, policy recommendations, industry knowledge\nKeywords: agent explained, knowledgeable, expert, didn't understand, confused about coverage\nExample: \"Agent Tom really understands business insurance\" → Agent Knowledge\n\nPolicy Explanation Clarity = How well coverage is explained, policy details communicated\nKeywords: explained policy, clear coverage, confusing, understood my needs, transparent\nExample: \"Sarah explained every detail of my homeowners policy\" → Policy Explanation Clarity\n\nPremium Competitiveness = Rate comparisons, pricing satisfaction, value for money\nKeywords: expensive, great rate, shopped around, found cheaper, competitive pricing\nExample: \"Found same coverage $200 cheaper elsewhere\" → Premium Competitiveness\n\nResponsiveness = Callback speed, email replies, availability, accessibility\nKeywords: always available, never answers, quick response, took days to respond\nExample: \"Agent always returns calls within an hour\" → Responsiveness\n\nRenewal Process = Renewal experience, rate increases, policy changes at renewal\nKeywords: renewal, rate went up, easy renewal, automatic renewal, renewal quote\nExample: \"Renewal rate increased 40% with no claims\" → Renewal Process\n\nOther = Everything else\n\nSENTIMENT:\n- positive: Praise, satisfaction, appreciation\n- negative: Complaints, dissatisfaction, problems\n- neutral: Factual observations, no strong opinion\n- mixed: Both positive and negative elements\n\nACTIONABILITY:\n- Agent Recognition: Positive agent performance for awards\n- Training Need: Knowledge gaps, service issues\n- Claims Process Review: Claim handling complaints\n- Pricing Review: Rate competitiveness issues\n- Communication Improvement: Response time problems\n- Retention Risk: Customer considering leaving\n- Competitive Intelligence: Comparing to other insurers\n- No Action Needed: General observation\n\nAGENT_MENTION:\n- Extract agent names if mentioned (Tom, Sarah, Mike, etc.)\n- Leave empty if no agent named\n- Extract first name only\n\nReturn ONLY the JSON. No explanation. Start with { and end with }"
            },
            {
              "content": "=Analyze this insurance agency review:\n\nAgency: {{ $json.title }}\nCustomer: {{ $json.name }}\nRating: {{ $json.stars }} stars\nDate: {{ $json.publishedAtDate }}\nReview: {{ $json.text }}\n\nReturn only JSON."
            }
          ]
        },
        "builtInTools": {},
        "options": {
          "maxTokens": 500,
          "temperature": 0
        }
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 2.1,
      "position": [
        -144,
        -176
      ],
      "id": "3b3d5a4b-0baa-4b0a-ab59-a47a1a138ba3",
      "name": "AI: Analyze Agency Feedback",
      "credentials": {
        "openAiApi": {
          "id": "ICwxUBbatsF2sDvy",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// ENHANCED PARSER WITH VALIDATION\nconst items = [];\nconst input = $input.all();\n\nfunction extractJSON(text) {\n  const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n  if (!jsonMatch) return null;\n  return jsonMatch[0];\n}\n\ninput.forEach((item, index) => {\n  try {\n    let aiText = item.json.output[0].content[0].text || '';\n    \n    // Clean markdown and extra text\n    aiText = aiText\n      .replace(/```json/gi, '')\n      .replace(/```/g, '')\n      .trim();\n    \n    // Extract JSON\n    const jsonStr = extractJSON(aiText);\n    \n    if (!jsonStr) {\n      throw new Error('No JSON found in response');\n    }\n    \n    // Parse\n    const parsed = JSON.parse(jsonStr);\n    \n    // Validate required fields\n    if (!parsed.feedback_category || !parsed.sentiment || !parsed.actionability) {\n      throw new Error('Missing required fields');\n    }\n    \n    items.push({ json: parsed });\n    \n  } catch (error) {\n    console.error(`Parse error for item ${index}:`, error.message);\n    \n    items.push({\n      json: {\n        feedback_category: 'Other',\n        sentiment: 'neutral',\n        actionability: 'No Action Needed',\n        agent_mention: '',\n        key_feedback: 'Parse error',\n        key_quote: ''\n      }\n    });\n  }\n});\n\nreturn items;"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        192,
        -176
      ],
      "id": "079f98ef-a019-4047-8a67-5e939e4e59d1",
      "name": "Parse AI Response"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "cat",
              "name": "feedback_category",
              "value": "={{ $json.feedback_category }}",
              "type": "string"
            },
            {
              "id": "sent",
              "name": "sentiment",
              "value": "={{ $json.sentiment }}",
              "type": "string"
            },
            {
              "id": "action",
              "name": "actionability",
              "value": "={{ $json.actionability }}",
              "type": "string"
            },
            {
              "id": "agent",
              "name": "agent_mention",
              "value": "={{ $json.agent_mention }}",
              "type": "string"
            },
            {
              "id": "feedback",
              "name": "key_feedback",
              "value": "={{ $json.key_feedback && $json.key_feedback.includes('Parse error') ? 'Not sufficient data available' : $json.key_feedback }}",
              "type": "string"
            },
            {
              "id": "quote",
              "name": "key_quote",
              "value": "={{ $json.key_quote && $json.key_quote !== '' ? $json.key_quote : 'No quote available' }}",
              "type": "string"
            },
            {
              "id": "date",
              "name": "review_date",
              "value": "={{ $('Validate Review Text').item.json.publishedAtDate }}",
              "type": "string"
            },
            {
              "id": "customer",
              "name": "customer_name",
              "value": "={{ $('Validate Review Text').item.json.name }}",
              "type": "string"
            },
            {
              "id": "rating",
              "name": "star_rating",
              "value": "={{ $('Validate Review Text').item.json.stars }}",
              "type": "number"
            },
            {
              "id": "text",
              "name": "review_text",
              "value": "={{ $('Validate Review Text').item.json.textTranslated || $('Validate Review Text').item.json.text }}",
              "type": "string"
            },
            {
              "id": "url",
              "name": "review_url",
              "value": "={{ $('Validate Review Text').item.json.reviewUrl }}",
              "type": "string"
            },
            {
              "id": "agency",
              "name": "agency_location",
              "value": "={{ $('Validate Review Text').item.json.address }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        400,
        -176
      ],
      "id": "106a4d6b-90f5-4f07-b04e-8f0e05bf0a95",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1cHL2h5Yt_QMohUE9n9eH2mocVyPLtJmeJe7thmFF4BM",
          "mode": "list",
          "cachedResultName": "Case 75 - Insurance sheet Log",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cHL2h5Yt_QMohUE9n9eH2mocVyPLtJmeJe7thmFF4BM/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cHL2h5Yt_QMohUE9n9eH2mocVyPLtJmeJe7thmFF4BM/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Review_Date": "={{ $json.review_date }}",
            "Customer_Name": "={{ $json.customer_name }}",
            "Star_Rating": "={{ $json.star_rating }}",
            "Review_Text": "={{ $json.review_text }}",
            "Feedback_Category": "={{ $json.feedback_category }}",
            "Sentiment": "={{ $json.sentiment }}",
            "Actionability": "={{ $json.actionability }}",
            "Agent_Mention": "={{ $json.agent_mention }}",
            "Key_Feedback": "={{ $json.key_feedback }}",
            "Key_Quote": "={{ $json.key_quote }}",
            "Review_URL": "={{ $json.review_url }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "Review_Date",
              "displayName": "Review_Date",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer_Name",
              "displayName": "Customer_Name",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Star_Rating",
              "displayName": "Star_Rating",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Review_Text",
              "displayName": "Review_Text",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Feedback_Category",
              "displayName": "Feedback_Category",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentiment",
              "displayName": "Sentiment",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Actionability",
              "displayName": "Actionability",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Agent_Mention",
              "displayName": "Agent_Mention",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Key_Feedback",
              "displayName": "Key_Feedback",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Key_Quote",
              "displayName": "Key_Quote",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Review_URL",
              "displayName": "Review_URL",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        592,
        -176
      ],
      "id": "2f3de1c1-950b-4834-876b-ca9f61850e02",
      "name": "Log to Google Sheet",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "LOs2dbk9lby0NfDM",
          "name": "Google Sheets account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const items = $('Edit Fields').all();\n\nif (items.length === 0) {\n  return [{ json: { total_reviews: 0, avg_rating: 0, category_breakdown: {}, sentiment_breakdown: {}, actionability_breakdown: {}, agent_performance: {}, retention_risk_count: 0, competitive_mentions: 0, top_positive: [], top_negative: [], agency_location: 'Unknown' } }];\n}\n\nconst categoryCount = {};\nconst sentimentCount = {};\nconst actionabilityCount = {};\nconst agentCount = {};\nconst positiveItems = [];\nconst negativeItems = [];\nlet totalRating = 0;\nlet retentionRiskCount = 0;\nlet competitiveMentions = 0;\nconst agency_location = items[0].json.agency_location || 'Unknown';\n\nitems.forEach(item => {\n  const data = item.json;\n  const category = data.feedback_category || 'Other';\n  categoryCount[category] = (categoryCount[category] || 0) + 1;\n  const sentiment = data.sentiment || 'neutral';\n  sentimentCount[sentiment] = (sentimentCount[sentiment] || 0) + 1;\n  const action = data.actionability || 'No Action Needed';\n  actionabilityCount[action] = (actionabilityCount[action] || 0) + 1;\n  \n  // Track agent mentions\n  if (data.agent_mention && data.agent_mention.trim() !== '') {\n    const agentName = data.agent_mention.trim();\n    if (!agentCount[agentName]) {\n      agentCount[agentName] = { positive: 0, negative: 0, total: 0 };\n    }\n    agentCount[agentName].total += 1;\n    if (sentiment === 'positive') {\n      agentCount[agentName].positive += 1;\n    } else if (sentiment === 'negative') {\n      agentCount[agentName].negative += 1;\n    }\n  }\n  \n  // Track retention risk\n  if (action === 'Retention Risk') {\n    retentionRiskCount += 1;\n  }\n  \n  // Track competitive intelligence\n  if (action === 'Competitive Intelligence') {\n    competitiveMentions += 1;\n  }\n  \n  totalRating += data.star_rating || 0;\n  \n  const feedbackItem = {\n    feedback: data.key_feedback || '',\n    quote: data.key_quote || '',\n    customer: data.customer_name || 'Anonymous',\n    date: data.review_date || '',\n    rating: data.star_rating || 0,\n    url: data.review_url || '',\n    category: category,\n    actionability: action,\n    agent: data.agent_mention || ''\n  };\n  \n  if (sentiment === 'positive') {\n    positiveItems.push(feedbackItem);\n  } else if (sentiment === 'negative') {\n    negativeItems.push(feedbackItem);\n  }\n});\n\n// Sort by rating\npositiveItems.sort((a, b) => b.rating - a.rating);\nnegativeItems.sort((a, b) => a.rating - b.rating);\n\nconst topPositive = positiveItems.slice(0, 5);\nconst topNegative = negativeItems.slice(0, 5);\nconst avgRating = items.length > 0 ? (totalRating / items.length).toFixed(2) : 0;\n\n// Convert agent object to sorted array\nconst agentArray = Object.keys(agentCount).map(name => ({\n  name: name,\n  positive: agentCount[name].positive,\n  negative: agentCount[name].negative,\n  total: agentCount[name].total,\n  net_score: agentCount[name].positive - agentCount[name].negative\n})).sort((a, b) => b.net_score - a.net_score);\n\nreturn [{ json: { total_reviews: items.length, avg_rating: avgRating, category_breakdown: categoryCount, sentiment_breakdown: sentimentCount, actionability_breakdown: actionabilityCount, agent_performance: agentArray, retention_risk_count: retentionRiskCount, competitive_mentions: competitiveMentions, top_positive: topPositive, top_negative: topNegative, agency_location: agency_location } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        784,
        -176
      ],
      "id": "31ac27a6-2aec-449e-9549-16519358d26c",
      "name": "Aggregate Agency Performance"
    },
    {
      "parameters": {
        "sendTo": "agencyowner@insurance.com",
        "subject": "=Monthly Agency Performance Report - {{ $json.agency_location }}",
        "emailType": "text",
        "message": "==MONTHLY INSURANCE AGENCY PERFORMANCE REPORT\n================================================\nAgency: {{ $json.agency_location }}\nDate: {{ new Date().toLocaleDateString() }}\n\nOVERVIEW:\nTotal Reviews: {{ $json.total_reviews }}\nAverage Rating: {{ $json.avg_rating }}/5.0 stars\n\nFEEDBACK CATEGORIES:\n{{ Object.keys($json.category_breakdown).map(cat => cat + ': ' + $json.category_breakdown[cat]).join('\\n') }}\n\nSENTIMENT:\nPositive: {{ $json.sentiment_breakdown.positive || 0 }}\nNegative: {{ $json.sentiment_breakdown.negative || 0 }}\nNeutral: {{ $json.sentiment_breakdown.neutral || 0 }}\n\nCRITICAL ALERTS:\nRetention Risk: {{ $json.retention_risk_count }} customers at risk\nCompetitive Mentions: {{ $json.competitive_mentions }}\n\nAGENT PERFORMANCE - TOP 5:\n{{ $json.agent_performance.slice(0, 5).map((agent, i) => (i+1) + '. ' + agent.name + ' (' + agent.positive + ' positive, ' + agent.negative + ' negative) Net: ' + agent.net_score).join('\\n') }}\n\nTOP 5 POSITIVE:\n{{ $json.top_positive.map((item, i) => (i+1) + '. [' + item.category + '] ' + item.rating + ' stars - Agent: ' + item.agent + '\\n   ' + item.feedback + '\\n   Quote: ' + item.quote).join('\\n\\n') }}\n\nTOP 5 NEGATIVE:\n{{ $json.top_negative.map((item, i) => (i+1) + '. [' + item.category + '] ' + item.rating + ' stars - Agent: ' + item.agent + '\\n   ' + item.feedback + '\\n   Quote: ' + item.quote).join('\\n\\n') }}\n\nACTIONS NEEDED:\nAgent Recognition: {{ $json.actionability_breakdown['Agent Recognition'] || 0 }}\nTraining Needs: {{ $json.actionability_breakdown['Training Need'] || 0 }}\nClaims Review: {{ $json.actionability_breakdown['Claims Process Review'] || 0 }}\nPricing Review: {{ $json.actionability_breakdown['Pricing Review'] || 0 }}\nCommunication Issues: {{ $json.actionability_breakdown['Communication Improvement'] || 0 }}\n\nIMMEDIATE FOLLOW-UP:\n- Call retention risk customers: {{ $json.retention_risk_count }}\n- Process agent bonuses for top performers\n- Schedule training for underperformers\n- Review competitive pricing\n\nFull details in Google Sheets.\n\nGenerated: {{ new Date().toLocaleDateString() }}",
        "options": {}
      },
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        976,
        -176
      ],
      "id": "f526acf5-f26c-4f39-935c-ca8bdf70f3c3",
      "name": "Send Monthly Performance Report",
      "webhookId": "135bcdbe-5327-417e-aa1c-1d19e72df03f",
      "credentials": {
        "gmailOAuth2": {
          "id": "cyqCGWcggZNMcSOv",
          "name": "Gmail account"
        }
      }
    }
  ],
  "pinData": {},
  "connections": {
    "Monthly Schedule - 1st of Month": {
      "main": [
        [
          {
            "node": "Scrape Agency Reviews",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Agency Reviews": {
      "main": [
        [
          {
            "node": "Get Dataset Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Dataset Items": {
      "main": [
        [
          {
            "node": "Validate Review Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Review Text": {
      "main": [
        [
          {
            "node": "AI: Analyze Agency Feedback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI: Analyze Agency Feedback": {
      "main": [
        [
          {
            "node": "Parse AI Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Response": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Log to Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log to Google Sheet": {
      "main": [
        [
          {
            "node": "Aggregate Agency Performance",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Agency Performance": {
      "main": [
        [
          {
            "node": "Send Monthly Performance Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c266c96e-6e69-4f89-a02d-b1eca827c082",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "3a43da28588548e21903e71cf1dc3ddd65c24bf0c62e7e4b77542ffe87ad79c6"
  },
  "id": "t1xSbq7k0RFOHxja",
  "tags": []
}